import openpyxl

class Reader:

    def __init__(self):
        self.workbook = None
        self.sheetnames = None
        self.worksheet = None

    def open_excel(self, filename):
        """打开Excel文件加载工作簿"""
        self.workbook = openpyxl.load_workbook(filename)
        self.sheetnames = self.workbook.sheetnames
        self.worksheet = self.workbook[self.sheetnames[0]]

    def set_worksheet(self, sheet_name):
        """切换工作表"""
        self.worksheet = self.workbook[sheet_name]

    def read_data_to_list(self):
        """读取当前工作表中的数据为 列表嵌套列表"""
        lines = []  # 表列表, 存储每一行小列表
        for row in list(self.worksheet.rows):
            line = []  # 行列表, 存储行中每个单元格的数据
            for cell in row:
                value = cell.value
                if value is None or value == ' ':
                    value = ''
                line.append(value)  # 每遍历一个单元格 就 追加到行列表中
            lines.append(line)  # 将行列表追到表列表中
        return lines

    def read_data_to_dict(self):
        """读取当前工作表中的数据为 列表嵌套字典"""
        datas = []  # 存储 每行数据的表列表
        title = []  # 第一行数据
        for cell in list(self.worksheet.rows)[0]:  # 从所有行中 获取下标为0的 第一行, 遍历第一行中的单元格
            title.append(cell.value)
        print(title)
        for row in list(self.worksheet.rows)[1:]:  # 从所有行中, 切片获取除第一行外的 其它所有行数据, 遍历每一行
            line = []  # 行列表
            for cell in row:  # 遍历每行中的单元格
                value = cell.value
                if value is None:
                    value = ''
                line.append(value)
            datas.append(dict(zip(title, line)))
        return datas

